Activity এবং Fragment এর মধ্যে Data Communication

Mobile App Development - অ্যান্ড্রয়েড ডেভেলপমেন্ট (Android) - Intents এবং Intent Filters
230

Android অ্যাপে Activity এবং Fragment এর মধ্যে ডেটা যোগাযোগ করা একটি সাধারণ কাজ, যা অ্যাপের ভেতরে বিভিন্ন কম্পোনেন্টের ইন্টারঅ্যাকশনের জন্য অত্যন্ত গুরুত্বপূর্ণ। Activity এবং Fragment এর মধ্যে ডেটা আদান-প্রদানের বেশ কয়েকটি পদ্ধতি রয়েছে। নিচে এই পদ্ধতিগুলো এবং তাদের উদাহরণ আলোচনা করা হলো:


১. Fragment থেকে Activity এর কাছে Data Communication

Fragment থেকে Activity-তে ডেটা পাঠানোর জন্য Interface ব্যবহার করা সবচেয়ে সাধারণ এবং কার্যকরী পদ্ধতি। এটি একটি callback pattern ব্যবহার করে Fragment থেকে Activity-তে ডেটা পাঠায়।

ধাপ ১: Fragment এ Interface তৈরি করুন

public class MyFragment extends Fragment {

    // Interface for communication
    public interface OnDataPassListener {
        void onDataPass(String data);
    }

    private OnDataPassListener dataPassListener;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            dataPassListener = (OnDataPassListener) context;
        } catch (ClassCastException e) {
            throw new ClassCastException(context.toString()
                    + " must implement OnDataPassListener");
        }
    }

    // Call this method to pass data to Activity
    public void sendDataToActivity(String data) {
        if (dataPassListener != null) {
            dataPassListener.onDataPass(data);
        }
    }
}

ধাপ ২: Activity তে Interface ইমপ্লিমেন্ট করুন

public class MainActivity extends AppCompatActivity implements MyFragment.OnDataPassListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Fragment যোগ করুন
        MyFragment fragment = new MyFragment();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, fragment)
                .commit();
    }

    // Implement the method from the interface
    @Override
    public void onDataPass(String data) {
        // Fragment থেকে প্রাপ্ত ডেটা হ্যান্ডেল করুন
        Toast.makeText(this, "Data received: " + data, Toast.LENGTH_SHORT).show();
    }
}

এখানে MyFragment থেকে MainActivity তে Interface ব্যবহার করে ডেটা পাঠানো হয়েছে। sendDataToActivity() মেথড কল করার মাধ্যমে Fragment থেকে Activity তে ডেটা পাঠানো হয়।


২. Activity থেকে Fragment এ Data Communication

Activity থেকে Fragment এ ডেটা পাঠানো সাধারণত Bundle ব্যবহার করে করা হয়। আপনি Fragment তৈরি করার সময় ডেটা Bundle এ রেখে সেটি Fragment এ পাঠাতে পারেন।

ধাপ ১: Fragment ক্লাস তৈরি করুন

public class MyFragment extends Fragment {

    private String data;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_my, container, false);

        // Get data from Bundle
        if (getArguments() != null) {
            data = getArguments().getString("key");
            Toast.makeText(getContext(), "Data received: " + data, Toast.LENGTH_SHORT).show();
        }

        return view;
    }

    // Static method for creating a new instance with data
    public static MyFragment newInstance(String data) {
        MyFragment fragment = new MyFragment();
        Bundle args = new Bundle();
        args.putString("key", data);
        fragment.setArguments(args);
        return fragment;
    }
}

ধাপ ২: Activity থেকে Fragment এ ডেটা পাঠান

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // Fragment তৈরি করুন এবং ডেটা পাঠান
        MyFragment fragment = MyFragment.newInstance("Hello Fragment");
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, fragment)
                .commit();
    }
}

এখানে newInstance() মেথডের মাধ্যমে Fragment তৈরি করার সময় Bundle ব্যবহার করে ডেটা পাঠানো হয়েছে। Fragment এ ডেটা onCreateView() মেথডে getArguments() এর মাধ্যমে রিসিভ করা হয়েছে।


৩. Fragment থেকে Fragment এ Data Communication (Through Activity)

Fragment থেকে অন্য Fragment এ ডেটা পাঠানোর জন্য, সাধারণত Activity একটি Mediator হিসেবে কাজ করে। প্রথম Fragment থেকে ডেটা Activity-তে পাঠানো হয় এবং তারপর Activity সেই ডেটা অন্য Fragment-এ পাঠায়।

ধাপ ১: প্রথম Fragment থেকে Activity তে ডেটা পাঠান (আগের উদাহরণে যেমন দেখানো হয়েছে)।

ধাপ ২: Activity তে ডেটা গ্রহণ করে দ্বিতীয় Fragment এ পাঠান

public class MainActivity extends AppCompatActivity implements FirstFragment.OnDataPassListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // প্রথম Fragment যোগ করুন
        FirstFragment firstFragment = new FirstFragment();
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment)
                .commit();
    }

    // Fragment থেকে ডেটা গ্রহণ করার পরে এটি অন্য Fragment এ পাঠান
    @Override
    public void onDataPass(String data) {
        SecondFragment secondFragment = SecondFragment.newInstance(data);
        getSupportFragmentManager().beginTransaction()
                .replace(R.id.fragment_container, secondFragment)
                .commit();
    }
}

ধাপ ৩: দ্বিতীয় Fragment এ ডেটা গ্রহণ করুন

public class SecondFragment extends Fragment {

    private String data;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_second, container, false);

        // Get data from Bundle
        if (getArguments() != null) {
            data = getArguments().getString("key");
            Toast.makeText(getContext(), "Data received: " + data, Toast.LENGTH_SHORT).show();
        }

        return view;
    }

    public static SecondFragment newInstance(String data) {
        SecondFragment fragment = new SecondFragment();
        Bundle args = new Bundle();
        args.putString("key", data);
        fragment.setArguments(args);
        return fragment;
    }
}

এখানে FirstFragment থেকে ডেটা MainActivity তে পাঠানো হয়েছে এবং তারপর সেই ডেটা SecondFragment এ পাঠানো হয়েছে।


৪. ViewModel ব্যবহার করে Fragment এবং Activity এর মধ্যে Data Communication

ViewModel হল একটি Lifecycle-aware কম্পোনেন্ট, যা Activity এবং Fragment এর মধ্যে ডেটা শেয়ার করতে ব্যবহৃত হয়। এটি ডেটা সংরক্ষণ করে রাখে এবং লাইফসাইকেল পরিবর্তনের সময় ডেটা হারানো থেকে রক্ষা করে।

উদাহরণ: ViewModel ব্যবহার করে Data Communication

ধাপ ১: ViewModel তৈরি করুন

public class SharedViewModel extends ViewModel {
    private MutableLiveData<String> sharedData = new MutableLiveData<>();

    public void setData(String data) {
        sharedData.setValue(data);
    }

    public LiveData<String> getData() {
        return sharedData;
    }
}

ধাপ ২: প্রথম Fragment এ ViewModel ব্যবহার করুন

public class FirstFragment extends Fragment {

    private SharedViewModel sharedViewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_first, container, false);

        sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);

        Button button = view.findViewById(R.id.button);
        button.setOnClickListener(v -> {
            sharedViewModel.setData("Data from First Fragment");
        });

        return view;
    }
}

ধাপ ৩: দ্বিতীয় Fragment এ ViewModel ব্যবহার করুন

public class SecondFragment extends Fragment {

    private SharedViewModel sharedViewModel;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_second, container, false);

        sharedViewModel = new ViewModelProvider(requireActivity()).get(SharedViewModel.class);

        sharedViewModel.getData().observe(getViewLifecycleOwner(), data -> {
            Toast.makeText(getContext(), "Data received: " + data, Toast.LENGTH_SHORT).show();
        });

        return view;
    }
}

এখানে ViewModel ব্যবহার করে দুটি Fragment এর মধ্যে ডেটা শেয়ার করা হয়েছে। প্রথম Fragment থেকে ডেটা সেট করলে দ্বিতীয় Fragment এ সেই ডেটা দেখা যাবে।


উপসংহার

Activity এবং Fragment এর মধ্যে ডেটা আদান-প্রদানের জন্য বিভিন্ন পদ্ধতি রয়েছে। Interface, Bundle, এবং ViewModel ব্যবহার করে আপনি সহজেই ডেটা শেয়ার করতে পারেন। আপনার অ্যাপ্লিকেশনের চাহিদা অনুযায়ী উপযুক্ত পদ্ধতি বেছে নেওয়া উচিত। ViewModel সবচেয়ে আধুনিক এবং কার্যকরী পদ্ধতি,

Content added By
Promotion
NEW SATT AI এখন আপনাকে সাহায্য করতে পারে।

Are you sure to start over?

Loading...